package com.customization.unionpay.contract.serivce.impl;

import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.customization.unionpay.contract.dao.BaseContractSynDataDao;
import com.customization.unionpay.contract.serivce.IContractProvisionService;
import com.customization.unionpay.contract.util.ContractWorkflowServiceUtils;
import com.engine.core.impl.Service;


public class ContractProvisionServiceImpl  extends Service implements IContractProvisionService {

    private static final Log logger = LogFactory.getLog(ContractProvisionServiceImpl.class);


    @Override
    public boolean createContractProvision(Integer pageSize) {

        /**
         * 1、按照合同中心传递的[合同收支类型]字段判断是否属于支出合同  （合同收付款关系	htsfkgx 支出合同 2）
         * 2、合同计提流程对以下条件的合同不推送
         * 不计提合同类型	判断逻辑
         * 1）虚拟合同	合同属性=虚拟合同
         * 2）银行框架子协议	合同关联信息=银行年度合作协议子协议
         * 3）基建合同	合同种类=基建合同
         * 4）被SQ关联的合同	被SQ关联过的付款计划行不计提         ？？？
         * 5）租赁（使用权资产/人事异地交流）                 ？？？
         * 6）资产（纯资产）	合同种类=资产合同and无费用化金额  ？？？
         * 7）已关闭合同	合同状态=已关闭
         * 移交中合同	合同状态=移交中
         * 备案中合同	合同状态=备案中
         * 变更中合同	合同状态=变更中
         *
         * 合同属性	htzx	0 主合同　1 补充合同　2 虚拟合同
         * 合同关联信息	htglxx  0 不涉及合同关联信息　1 收支匹配合同　2 银行年度合作协议子协议　3 共享额度营销合同
         * 合同种类	htzl	0 费用类　1 资产类（含资产费用类）　2 基建类　3 租赁类
         * 费用化金额	fyhje
         * 合同状态	htzt	0 备案中　1 有效　2 变更中　3 移交中　4 关闭中　5 已关闭
         * htsfkgx = 2 and htzt in (0,1) and htglxx != 2 and htzl != 2 and htzt in (1,4)
         */
        BaseContractSynDataDao baseContractSynDataDao = new BaseContractSynDataDao();
        // 1. 查询待处理支出合同台账列表
        Integer total = baseContractSynDataDao.selectJTContractZchttzTotal();
        Integer totalPages = total%pageSize;

        for(int page = 0; page < totalPages; page++) {
            // 2. 查询待处理支出合同台账列表
            JSONArray zchttzList = baseContractSynDataDao.selectZchttzByPage(page, pageSize);

            for (int i = 0; i < zchttzList.size(); i++) {
                JSONObject jsonObject = zchttzList.getJSONObject(i);
                String htbh = jsonObject.getString("htbh");
                JSONObject htjtJson = new JSONObject();
                // 3. 查询待处理支出合同台账明细列表
                JSONArray zchttzmxList = baseContractSynDataDao.selectZchttzMXByHtbh(htbh);
                // 明细表1
                htjtJson.put("mx1", zchttzmxList);
                // 4. 查询待处理支出合同计划台账列表
                JSONArray fkjhtzList = baseContractSynDataDao.selectFkjhtzByHtbh(htbh);
                // 明细表2
                htjtJson.put("mx2", fkjhtzList);
                // 3. 创建计提合同流程
                ContractWorkflowServiceUtils.createWorkflowOfHTJT(jsonObject,htjtJson, user);
            }
        }
        return true;
    }
}
